package com.yuandian.utils;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;

/**
 * 说明：数学运算工具类
 * @Author yanjun
 * @Date 2020/12/28 11:30
 */
public final class MathUtil {

    /**
     * 两数相除，保留两位小数
     * @param a 被除数
     * @param div 除数
     * @return 结果
     */
    public static String division(Long a, int div) {
        BigDecimal b1 = new BigDecimal(String.valueOf((double) a / div));
        DecimalFormat df = new DecimalFormat("0.00");
        return df.format(b1);
    }

    /**
     * 两数相除，保留四位小数
     * @param a 被除数
     * @param div 除数
     * @return 结果
     */
    public static Double division(Integer a, Integer div) {
        if (div == null || div == 0) {
            return (double) a;
        }
        return new BigDecimal((double) a /div).setScale(4, RoundingMode.HALF_UP).doubleValue();
    }

    /**
     * 两数相除，保留四位小数
     * @param a 被除数
     * @param div 除数
     * @return 结果
     */
    public static Double division(Double a, Double div) {
        if (div == null || div == 0) {
            return a;
        }
        return new BigDecimal( a /div).setScale(4, RoundingMode.HALF_UP).doubleValue();
    }

    /**
     * double类型扩大100倍
     * @param d
     * @return
     */
    public static Double getDoubleRes(Double d) {
        BigDecimal a1 = new BigDecimal(Double.toString(d));
        BigDecimal a2 = new BigDecimal(Double.toString(100));
        BigDecimal result = a1.multiply(a2);
        // 保留两位小数
        BigDecimal one = new BigDecimal("1");
        double res = result.divide(one, 2, BigDecimal.ROUND_HALF_UP).doubleValue();
        return res;
    }


    public static double getDouble(Double allTime) {
        if (allTime == null) {
            return 0d;
        }
        return new BigDecimal(allTime).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
    }

    /**
     * 两数相除保留指定小数位
     * @param a1 被除数
     * @param a2 除数
     * @param keep 保留位
     * @return 计算结果，按保留位格式化补零对齐
     */
    public static String divideKeep(Long a1, Long a2, Integer keep) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < keep; i++) {
            sb.append("0");
        }
        double val = 0.0;
        if (a2 != 0) {
            val = new BigDecimal((double) a1 / a2).setScale(keep, BigDecimal.ROUND_HALF_UP).doubleValue();
        }
        return new DecimalFormat("#." + sb.toString()).format(val);
    }

    /**
     * 两数相除保留指定小数位
     * @param a1 被除数
     * @param a2 除数
     * @param keep 保留位
     * @return 计算结果
     */
    public static Double divideKeepNoFormat(Long a1, Long a2, Integer keep) {
        return divideKeepNoFormat((double) a1, (double) a2, keep);
    }

    /**
     * 两数相除保留指定小数位
     * @param a1 被除数
     * @param a2 除数
     * @param keep 保留位
     * @return 计算结果
     */
    public static Double divideKeepNoFormat(Double a1, Double a2, Integer keep) {
        if (a2 == 0) {
            return 0.0;
        }
        return new BigDecimal(a1 / a2).setScale(keep, BigDecimal.ROUND_HALF_UP).doubleValue();
    }

	/**
	 * 判断字符串是否是数字
	 * @param str 字符串
	 * @return
	 */
	public static boolean isNumeric(String str) {
		try {
			Double.parseDouble(str);
			return true;
		}
		catch (Exception e) {
			return false;
		}
	}
}
